<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script src="js/lodash-4.17.21.js"></script>
		<script type="text/javascript">
			/*
			 一、改变原数组的方法
			 1.push（） 末尾添加数据
			 2.pop（） 末尾出删除数据
			 3.unshift（） 头部添加数据
			 4.shift（） 头部删除数据
			 5.splice（）  截取数组
			 6.sort（） 排序
			 7.reverse（） 翻转数组
			 二、不改变原数组的方法
			 1.concat（）  合并数组
			 2.join（） 数组转字符串
			 3.slice（）截取数组的一部分数据
			 4.indexOf 从左检查数组中有没有这个数值
			 5.lastIndexOf 从右检查数组中有没有这个数值
			 三、ES6新增的数组方法
			 1. forEach()   用来循环遍历的 for
			 2.map  映射数组的
			 3.filter  过滤数组
			 4.find（）用来获取数组中满足条件的第一个数据
			 5.every  判断数组是不是满足所有条件
			 6.some（） 数组中有没有满足条件的
			 7.reduce（）叠加后的效果       
			 */
			function docWri() {
				document.write(arr + '<br />')
				document.write(res + '<br /><br />')
			} {
				// push
				var arr = [10, 20, 30, 40]
				var res = arr.push(50)
				docWri()
			} {
				// pop
				var arr = [10, 20, 30, 40]
				var res = arr.pop()
				docWri()
			} {
				// unshift
				var arr = [10, 20, 30, 40]
				var res = arr.unshift(0)
				docWri()
			} {
				// shift
				var arr = [10, 20, 30, 40]
				var res = arr.shift()
				docWri()
			} {
				// splice() 
				var arr = [1, 23, 45, 6, 7, 88]
				var res = arr.splice(1, 2, 88888)
				docWri()
			} {
				// sort()
				var arr = [2, 63, 48, 5, 4, 75, 69, 11, 23]
				arr.sort()
				document.write(arr + '<br />')
				arr.sort(function(a, b) {
					return (a - b)
				})
				document.write(arr + '<br />')
				arr.sort(function(a, b) {
					return (b - a)
				})
				document.write(arr + '<br /><br />')
			} {
				// reverse
				var arr = [10, 20, 30, 40]
				var res = arr.reverse()
				docWri()
			}

			// 不改变原数组
			{
				// concat
				var arr = [10, 20, 10, 30, 40, 50, 60]
				var res = arr.concat(70, 'ab', 80)
				docWri()
			} {
				// join
				var arr = [10, 20, 10, 30, 40, 50, 60]
				var res = arr.join('+')
				docWri()
			} {
				// slice
				var arr = [10, 20, 10, 30, 40, 50, 60]
				var res = arr.slice(1, 3)
				docWri()
			} {
				// indexOf
				var arr = [10, 20, 40, 30, 50, 10, 60]
				// var res = arr.indexOf(10, 2)
				var res = arr.lastIndexOf(10)
				docWri()
			}

			// ES6 数组方法
			{
				// forEach
				var arr = [1, 2, 3, 4, 5]
				var res = arr.forEach(function(item, index, arr) {
					console.log(item, 'item', index, 'index', arr, 'arr')
				})
				docWri()
			} {
				// map
				var arr = [1, 2, 3, 4, 5]
				var res = arr.map(function(item) {
					return item * 1000
				})
				docWri()
			} {
				// filter
				var arr = [1, 2, 3, 4, 5]
				var res = arr.filter(function(item) {
					return item > 2
				})
				docWri()
			} {
				// find
				var arr = [1, 2, 3, 4, 5]
				var res = arr.find(function(item) {
					return item >= 3
				})
				docWri()
			} {
				// every
				var arr = [1, 2, 3, 4, 5]
				var res = arr.every(function(item) {
					return item > 3
				})
				docWri()
			} {
				// some
				var arr = [1, 2, 3, 4, 5]
				var res = arr.some(function(item) {
					return item > 3
				})
				docWri()
			} {
				// reduce
				var arr = [1, 2, 3, 4, 5]
				var res = arr.reduce(function(prev, next) {
					return prev *= next
				}, 1)
				docWri()
			}

			{
				const arr = [
					{
						name: 'a',
						age: 16
					},
					{
						name: 'b',
						age: 17
					},
					{
						name: 'c',
						age: 18
					}
				]
				console.log(arr, 'arr')
				function random(arr) {
					const data = []
					let random
					while (arr && arr.length) {
						// random = Math.floor(Math.random() * arr.length)
						random = parseInt(Math.random() * arr.length)
						console.log(random, 'random')
						data.push(arr.splice(random, 1)[0])
					}
					return data
				}
				function shuffleArray(array) {
					for (let i = array.length - 1; i > 0; i--) {
						const j = Math.floor(Math.random() * (i + 1));
						[array[i], array[j]] = [array[j], array[i]];
					}
					return array;
				}
				console.log(random(arr), 'randomarr')
				// console.log(shuffleArray(arr), 'randomarr')
			}
		</script>
	</body>
</html>